#include "ReporteLogs.h"

#include <stdexcept>
#include <gtkmm/menuitem.h>
#include <gtkmm/messagedialog.h>

#include "VisorReportes.h"


ReporteLogs::ReporteLogs(Glib::RefPtr<Gtk::Builder> b, std::string nomMenuItem, std::string nomArchLog){
	// Obtiene la referencia a los elementos asociados a mostrar el reporte
	this->_pTxtArea = 0;
	b->get_widget("txtArea", this->_pTxtArea);

	this->_pTabNav = 0;
	b->get_widget("contentArea", this->_pTabNav);

	if (!this->_pTabNav) throw std::runtime_error("No se encontró 'contentArea'");
	if (!this->_pTxtArea) throw std::runtime_error("No se encontró 'txtArea'");

	// Conecta el reporte a la opcion de menú señalada
	Gtk::MenuItem* pMenuItem = 0;
	b->get_widget(nomMenuItem, pMenuItem);

	if (!pMenuItem) throw std::runtime_error("No se encontró '"+ nomMenuItem +"'");

	// Conecta la opcion del menú a este reporte
	pMenuItem->signal_activate().connect( sigc::mem_fun(*this, &ReporteLogs::mostrarReporte) );

	// Guarda el nombre del archivo que se debe mostrar
	this->_nomArchLog = nomArchLog;
}


ReporteLogs::~ReporteLogs(){
}


// Muestra el contenido del archivo en el textArea
void ReporteLogs::mostrarReporte(){
	try {
		// Lee el archivo a un buffer de texto
		VisorReportes vr(this->_nomArchLog);

		// Carga el buffer de texto en el textArea
		this->_pTxtArea->set_buffer(vr.getTextBuffer());

		// Muestra la pagina que contiene el textArea
		int numPag = this->_pTabNav->page_num(*this->_pTxtArea);
		if (numPag != this->_pTabNav->get_current_page()){
			this->_pTabNav->set_current_page(numPag);
		}

	} catch (std::runtime_error& rte){
		Gtk::MessageDialog md("Error al abrir un archivo");
		md.set_secondary_text("No fue posible abrir el archivo: "+this->_nomArchLog);
		md.run();
	}
}


